"""
写作代理 - 负责生成报告内容和代码示例
"""
from typing import Dict, Any
import logging
import traceback
from .base_agent import BaseAgent

logger = logging.getLogger(__name__)

class WriterAgent(BaseAgent):
    """写作代理"""
    
    def __init__(self):
        super().__init__()
        self.name = "writer"
        logger.info("WriterAgent 初始化完成")

    def execute(self, state: Dict[str, Any]) -> Dict[str, Any]:
        """
        执行写作
        
        Args:
            state: 当前状态，包含 requirement、plan 和 structure 等信息
            
        Returns:
            Dict[str, Any]: 写作结果
        """
        try:
            logger.info("开始执行写作...")
            logger.info(f"收到的状态数据: {state}")
            
            # 检查必需的字段
            required_fields = ["requirement", "plan", "structure"]
            for field in required_fields:
                if field not in state:
                    error_msg = f"状态中缺少 {field} 字段"
                    logger.error(error_msg)
                    return {"success": False, "error": error_msg, "status": "failed"}
            
            # 获取输入数据
            requirement = state["requirement"]
            plan = state["plan"]
            structure = state["structure"]
            
            # 构建写作提示
            prompt = self._create_writing_prompt(requirement, plan, structure)
            
            # 调用LLM生成内容
            logger.info("调用LLM生成文章内容...")
            result = self.call_llm([
                {"role": "system", "content": "你是一个专业的文章写作专家。"},
                {"role": "user", "content": prompt}
            ])
            
            logger.info(f"LLM返回结果状态: {result['success']}")
            
            if result["success"]:
                logger.info("文章生成成功")
                return {
                    "success": True,
                    "content": result["content"],
                    "status": "completed"
                }
            else:
                logger.error(f"LLM调用失败: {result.get('error')}")
                return {
                    "success": False,
                    "error": result["error"],
                    "status": "failed"
                }
                
        except Exception as e:
            error_msg = f"写作执行失败: {str(e)}"
            logger.error(error_msg)
            logger.error(f"错误详情: {traceback.format_exc()}")
            return {
                "success": False,
                "error": error_msg,
                "status": "failed"
            }

    def _create_writing_prompt(self, requirement: str, plan: str, structure: str) -> str:
        """
        创建写作提示词
        """
        return f"""
请根据以下信息撰写专业的技术文章：

需求描述：
{requirement}

写作计划：
{plan}

文章结构：
{structure}

写作要求：
1. 内容要专业、准确、易懂
2. 结构清晰，逻辑性强
3. 如果涉及技术实现，提供清晰的代码示例
4. 代码要有详细注释，解释关键步骤
5. 包含实际应用场景和最佳实践
6. 使用Markdown格式

请直接输出文章内容，无需其他额外信息。
""" 